﻿using System;


namespace LightEngine
{
    namespace MessbauerCore
    {
        namespace MessbauerData
        {
            /// <Описание перечисления public enum TransformationTypes>
            /// Перечисление содержит типы возможных преобразований спектра
            /// StrippingMethod - вычитание из одного спектра другого
            /// InvertingMethod - инвертирование спектра справа налево
            /// ScalingMethod - изменение представления спектра
            /// </Описание перечисления public enum TransformationTypes>
            public enum TransformationTypes
            {
                StrippingMethod = 1,
                InvertingMethod = 2,
                ScalingMethod = 3
            };

            /// <описание класса public class MessbSpectraTransformer>
            /// Версия класса 1.0
            /// Автор(ы): Ушаков Михаил
            /// Класс предназначен для хранения преобразования мессбауэровсикх спектров согласно
            /// алгоритму записанному в поле Algorithm и получения результатов преобразования.
            /// Элементы класса:
            /// 1. Константы класса:
            ///    отсутствуют.
            /// 2. Поля класса:
            /// а) private TransformationAlgorithm Algorithm; алгоритм преобразования (См. класс
            ///    transformationAlgorithms).
            /// 3. Методы класса:
            /// а) public MessbSpectraTransformer(TransformationAlgorithm Alg) конструктор класса,
            ///    инициализирует Algorithm типом выбранного алгоритма преобразования Alg.
            /// б) public MessbSpectrum DoTransformation(MessbSpectrum Spec1, MessbSpectrum Spec2,
            ///                                          UInt32 Param, ref Boolean Result)
            ///    проведение преобразований над Spec1 и Spec2, с параметром Param
            ///    спектр-резутат преобразований, в Result заносится прошло ли преобразование
            ///    без ошибок(true - без ошибок, false - с ошибками), если преобразование прошло с
            ///    ошибками функция в качестве MessbSpectrum возвращается null, если успешно, то 
            ///    возвращается объект типа MessbSpectrum.
            /// 4. Свойства и индексаторы класса:
            ///    отсутствуют.
            /// </описание класса public class MessbSpectraTransformer>

            public class MessbSpectraTransformer
            {
                private TransformationAlgorithm Algorithm;

                public MessbSpectraTransformer(TransformationAlgorithm Alg)
                {
                    Algorithm = Alg;
                }

                public MessbSpectrum DoTransformation(MessbSpectrum Spec1, MessbSpectrum Spec2,
                                                      UInt32 Param, ref Boolean Result)
                {
                    if (Spec2 == null)
                         Result = Algorithm.Transform(Spec1, Param);
                    else Result = Algorithm.Transform(Spec1, Spec2, Param);
                    return Algorithm.GetTransformationResult();
                }
            }
        }
    }
}
